import 'package:flutter/cupertino.dart';
import 'package:kq_flutter_core_widget/widgets/stackView/stack_view.dart';
import 'package:kq_flutter_tv_widgets/widgets/stackView/stack_view_child_widget.dart';

class StackViewWidget extends StatefulWidget {
  ///初始化展示界面
  final StackViewChildWidget? Function(StackViewWidgetState state) init;

  const StackViewWidget({
    super.key,
    required this.init,
  });

  @override
  State<StatefulWidget> createState() => StackViewWidgetState();
}

class StackViewWidgetState extends State<StackViewWidget> {
  StackViewState? state;

  @override
  Widget build(BuildContext context) {
    return StackView(
      init: (state) {
        this.state = state;
        return widget.init.call(this) ?? Container();
      },
    );
  }

  ///回退，返回上一个界面。
  ///[bool] 返回true表示成功返回上一级，
  ///返回false表示返回失败，已是最后一个界面，不可继续返回。
  bool? back({
    dynamic result,
    bool showAnimate = true,
  }) {
    return state?.back(
      result: result,
      showAnimate: showAnimate,
    );
  }

  ///关闭，显示空界面
  close({dynamic result}) {
    state?.close(result: result);
  }

  ///跳转指定界面。
  ///[page] 需要打开的界面。
  ///[arguments] 打开时需要给下一个界面传递的参数。
  ///[callback]打开的界面关闭时，回传的参数。
  open(
    StackViewChildWidget widget, {
    dynamic arguments,
    Function(dynamic result)? callback,
    bool showAnimate = true,
  }) {
    state?.addWidget(
      widget,
      arguments: arguments,
      callback: callback,
      showAnimate: showAnimate,
    );
  }

  ///是否可返回
  bool backAble() {
    return state?.backAble() ?? false;
  }

  ///获取参数
  dynamic getArguments() {
    return state?.arguments;
  }

  ///根据[key]获取参数，只支持Map传参方式
  S? getArg<S>(String key) {
    return state?.getArg(key);
  }
}
